<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript 的成员查找机制(规则)</title>
    <!-- 
        ① 当访问一个对象的属性（包括方法）时，首先查找这个对象自身有没有该属性。
        ② 如果没有就查找它的原型（也就是 __proto__指向的 prototype 原型对象）。
        ③ 如果还没有就查找原型对象的原型（Object的原型对象）。
        ④ 依此类推一直找到 Object 为止（null）。
        ⑤ __proto__对象原型的意义就在于为对象成员查找机制提供一个方向，或者说一条路线。
     -->
</head>
<body>
    
</body>
<script>
    function Star(uname,age) {
        this.uname = uname
        this.age  = age
    }
    var that
    Star.prototype = {
        constructor:Star,
        sing: function(song) {
            console.log(song);
            // 在构造函数里面  this指向的是对象实例 smx
            // 原型对象函数里面， this 指向的是实例对象 smx
            that = this
        },
        movie: function(mname) {
            console.log(mname);
            that = this
        },
        sex: '男'
    }
    var smx = new Star('smx',20)
    smx.sing('不忘')
    smx.movie('魔道')
    smx.sex='女'
    console.log(smx.sex);
    console.log(Object.prototype);
    console.log(smx);
    console.log(Star.prototype);
    console.log(smx.toString());
    console.log(that === smx);

    // 原型对象this指向
    // 构造函数中的 this 指向我们实例对象。

    // 原型对象里面放的是方法，这个方法里面的 this 指向的是这个方法的调用者, 
    // 也就是这个实例对象。 

    // Star.prototype.sex = '女'
</script>
</html>